package com.shujia.day16.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        /*
            服务端：
                1.通过ServerSocket创建Socket对象
                2.通过Socket来建立IO流
                3.从IO流中读取数据
                4.关闭通道
         */


        // 1.public ServerSocket(int port)  通过该构造函数可以设置Socket对应的端口号 用于接收数据
        ServerSocket serverSocket = new ServerSocket(8888);

        // 2.通过accept接收一个从客户端建立的一个Socket连接 因为客户端存在有多个，服务端根据每个客户端的连接建立对应的Socket
        Socket socket = serverSocket.accept();

        // 3.服务端从socket中获取对应的IO流
        InputStream inputStream = socket.getInputStream();


        // 4.处理接收到的数据
        byte[] bytes = new byte[1024];
        int read = 0; // 和之前IO流阶段的read是一样的 如果是-1表示没有数据 如果是正数那么返回的就是读取到数据的长度

        while ((read = inputStream.read(bytes)) != -1) {
            // 将Byte数组转成字符串
            String str = new String(bytes, 0, read);
            System.out.println(str);
            socket.shutdownInput();
        }

        // 5.接收到数据后，可以给其回复一条信息
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("已经接收到客户端的数据".getBytes());
        outputStream.flush();

        outputStream.close();
        inputStream.close();
        socket.close();

    }
}
